"use strict";
const electron = require("electron");
electron.contextBridge.exposeInMainWorld("ipcRenderer", {
  on(...args) {
    const [channel, listener] = args;
    return electron.ipcRenderer.on(channel, (event, ...args2) => listener(event, ...args2));
  },
  off(...args) {
    const [channel, ...omit] = args;
    return electron.ipcRenderer.off(channel, ...omit);
  },
  send(...args) {
    const [channel, ...omit] = args;
    return electron.ipcRenderer.send(channel, ...omit);
  },
  invoke(...args) {
    const [channel, ...omit] = args;
    return electron.ipcRenderer.invoke(channel, ...omit);
  }
  // You can expose other APTs you need here.
  // ...
});
electron.contextBridge.exposeInMainWorld("electronAPI", {
  openPrompt: (options) => electron.ipcRenderer.invoke("open_prompt", options),
  readFile: (options) => electron.ipcRenderer.invoke("read_file", options),
  selectDirectory: () => electron.ipcRenderer.invoke("select_directory"),
  getLogFiles: (dirPath) => electron.ipcRenderer.invoke("get_log_files", dirPath),
  readFileIncremental: (options) => electron.ipcRenderer.invoke("read_file_incremental", options),
  readFileChunked: (options) => electron.ipcRenderer.invoke("read_file_chunked", options),
  readFileTail: (options) => electron.ipcRenderer.invoke("read_file_tail", options),
  readFileHead: (options) => electron.ipcRenderer.invoke("read_file_head", options),
  selectJdkDirectory: () => electron.ipcRenderer.invoke("select_jdk_directory"),
  selectJarFile: () => electron.ipcRenderer.invoke("select_jar_file"),
  verifyJdkPath: (jdkPath) => electron.ipcRenderer.invoke("verify_jdk_path", jdkPath),
  verifyJarFile: (jarPath) => electron.ipcRenderer.invoke("verify_jar_file", jarPath),
  startJarService: (options) => electron.ipcRenderer.invoke("start_jar_service", options),
  stopJarService: () => electron.ipcRenderer.invoke("stop_jar_service"),
  checkServiceHealth: () => electron.ipcRenderer.invoke("check_service_health"),
  checkPortOccupied: (port) => electron.ipcRenderer.invoke("check_port_occupied", port),
  // 版本更新相关 API
  fetchVersionInfo: (versionUrl) => electron.ipcRenderer.invoke("fetch_version_info", versionUrl),
  getCachedVersion: () => electron.ipcRenderer.invoke("get_cached_version"),
  saveVersionCache: (versionInfo) => electron.ipcRenderer.invoke("save_version_cache", versionInfo),
  downloadFile: (options) => electron.ipcRenderer.invoke("download_file", options),
  cancelDownload: () => electron.ipcRenderer.invoke("cancel_download"),
  checkFileExists: (filePath) => electron.ipcRenderer.invoke("check_file_exists", filePath),
  selectDownloadPath: () => electron.ipcRenderer.invoke("select_download_path"),
  // 监听下载进度
  onDownloadProgress: (callback) => {
    electron.ipcRenderer.on("download-progress", (_, progress) => callback(progress));
  },
  offDownloadProgress: () => {
    electron.ipcRenderer.removeAllListeners("download-progress");
  }
});
function domReady(condition = ["complete", "interactive"]) {
  return new Promise((resolve) => {
    if (condition.includes(document.readyState)) {
      resolve(true);
    } else {
      document.addEventListener("readystatechange", () => {
        if (condition.includes(document.readyState)) {
          resolve(true);
        }
      });
    }
  });
}
const safeDOM = {
  append(parent, child) {
    if (!Array.from(parent.children).find((e) => e === child)) {
      return parent.appendChild(child);
    }
  },
  remove(parent, child) {
    if (Array.from(parent.children).find((e) => e === child)) {
      return parent.removeChild(child);
    }
  }
};
function useLoading() {
  const className = `yzj-pro-loading`;
  const styleContent = `
/* 彩虹背景自然浪潮动画 - 从左往右流动 */
@keyframes rainbow-wave {
  0% {
    background-position: -100% 0%;
  }
  25% {
    background-position: -25% 30%;
  }
  50% {
    background-position: 50% 70%;
  }
  75% {
    background-position: 125% 20%;
  }
  100% {
    background-position: 200% 50%;
  }
}

/* 波浪曲线变形动画 */
@keyframes wave-distortion {
  0% {
    transform: skewX(0deg) scaleY(1);
  }
  20% {
    transform: skewX(2deg) scaleY(1.05);
  }
  40% {
    transform: skewX(-1deg) scaleY(0.98);
  }
  60% {
    transform: skewX(1.5deg) scaleY(1.02);
  }
  80% {
    transform: skewX(-0.5deg) scaleY(1.01);
  }
  100% {
    transform: skewX(0deg) scaleY(1);
  }
}

/* 字母从右侧进入并旋转的动画 */
@keyframes letter-enter {
  0% {
    transform: translateX(200px) rotate(0deg);
    opacity: 0;
  }
  50% {
    opacity: 1;
  }
  100% {
    transform: translateX(0) rotate(-360deg);
    opacity: 1;
  }
}

/* 字母从中间向左滚动消失的动画 */
@keyframes letter-exit {
  0% {
    transform: translateX(0) rotate(0deg);
    opacity: 1;
  }
  80% {
    opacity: 1;
  }
  100% {
    transform: translateX(-300px) rotate(-360deg);
    opacity: 0;
  }
}

.app-loading-wrap {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: 
    radial-gradient(ellipse at top, rgba(255,255,255,0.1) 0%, transparent 50%),
    linear-gradient(120deg, #ff0000, #ff7f00, #ffff00, #00ff00, #0000ff, #4b0082, #9400d3, #ff0000, #ff7f00),
    radial-gradient(ellipse at bottom, rgba(255,255,255,0.05) 0%, transparent 70%);
  background-size: 100% 100%, 600% 150%, 100% 100%;
  animation: 
    rainbow-wave 12s ease-in-out infinite,
    wave-distortion 8s ease-in-out infinite;
  z-index: 9;
  overflow: hidden;
}

.app-loading-wrap::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(45deg, 
    transparent 20%, 
    rgba(255,255,255,0.1) 40%, 
    transparent 60%, 
    rgba(255,255,255,0.05) 80%, 
    transparent 100%);
  background-size: 200% 200%;
  animation: wave-overlay 15s ease-in-out infinite reverse;
  pointer-events: none;
}

/* 波浪叠加层动画 */
@keyframes wave-overlay {
  0% {
    background-position: -50% -50%;
    transform: rotate(0deg);
  }
  33% {
    background-position: 50% 150%;
    transform: rotate(1deg);
  }
  66% {
    background-position: 150% -50%;
    transform: rotate(-0.5deg);
  }
  100% {
    background-position: 250% 150%;
    transform: rotate(0deg);
  }
}

.${className} {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-family: 'Arial Black', Arial, sans-serif;
  font-size: 4rem;
  font-weight: bold;
  text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
}

.${className} .letter {
  color: white;
  opacity: 0;
  transform: translateX(200px);
  animation-fill-mode: forwards;
}

/* 入场动画 */
.${className}.entering .letter:nth-child(1) { animation: letter-enter 0.8s ease-out 0.1s forwards; }
.${className}.entering .letter:nth-child(2) { animation: letter-enter 0.8s ease-out 0.3s forwards; }
.${className}.entering .letter:nth-child(3) { animation: letter-enter 0.8s ease-out 0.5s forwards; }
.${className}.entering .letter:nth-child(4) { animation: letter-enter 0.8s ease-out 0.7s forwards; }
.${className}.entering .letter:nth-child(5) { animation: letter-enter 0.8s ease-out 0.9s forwards; }
.${className}.entering .letter:nth-child(6) { animation: letter-enter 0.8s ease-out 1.1s forwards; }
.${className}.entering .letter:nth-child(7) { animation: letter-enter 0.8s ease-out 1.3s forwards; }

/* 退场动画 */
.${className}.exiting .letter:nth-child(1) { animation: letter-exit 0.8s ease-in 0.1s forwards; }
.${className}.exiting .letter:nth-child(2) { animation: letter-exit 0.8s ease-in 0.3s forwards; }
.${className}.exiting .letter:nth-child(3) { animation: letter-exit 0.8s ease-in 0.5s forwards; }
.${className}.exiting .letter:nth-child(4) { animation: letter-exit 0.8s ease-in 0.7s forwards; }
.${className}.exiting .letter:nth-child(5) { animation: letter-exit 0.8s ease-in 0.9s forwards; }
.${className}.exiting .letter:nth-child(6) { animation: letter-exit 0.8s ease-in 1.1s forwards; }
.${className}.exiting .letter:nth-child(7) { animation: letter-exit 0.8s ease-in 1.3s forwards; }

/* 等待状态时的轻微浮动效果 */
.${className}.waiting .letter {
  animation: none;
  opacity: 1;
  transform: translateX(0) rotate(0deg);
}

/* 退场状态初始设置 */
.${className}.exiting .letter {
  opacity: 1;
  transform: translateX(0) rotate(0deg);
}

@keyframes float {
  0%, 100% { transform: translateY(0px); }
  50% { transform: translateY(-10px); }
}

.${className}.waiting .letter:nth-child(1) { animation: float 2s ease-in-out 0.1s infinite; }
.${className}.waiting .letter:nth-child(2) { animation: float 2s ease-in-out 0.3s infinite; }
.${className}.waiting .letter:nth-child(3) { animation: float 2s ease-in-out 0.5s infinite; }
.${className}.waiting .letter:nth-child(4) { animation: float 2s ease-in-out 0.7s infinite; }
.${className}.waiting .letter:nth-child(5) { animation: float 2s ease-in-out 0.9s infinite; }
.${className}.waiting .letter:nth-child(6) { animation: float 2s ease-in-out 1.1s infinite; }
.${className}.waiting .letter:nth-child(7) { animation: float 2s ease-in-out 1.3s infinite; }
    `;
  const oStyle = document.createElement("style");
  const oDiv = document.createElement("div");
  oStyle.id = "app-loading-style";
  oStyle.innerHTML = styleContent;
  oDiv.className = "app-loading-wrap";
  oDiv.innerHTML = `
    <div class="${className} entering" id="yzj-pro-text">
      <span class="letter">Y</span>
      <span class="letter">Z</span>
      <span class="letter">J</span>
      <span class="letter">-</span>
      <span class="letter">P</span>
      <span class="letter">R</span>
      <span class="letter">O</span>
    </div>
  `;
  let animationCycle;
  let isAnimating = false;
  function startAnimationCycle() {
    if (isAnimating) return;
    isAnimating = true;
    const textElement = document.getElementById("yzj-pro-text");
    if (!textElement) return;
    textElement.className = `${className} entering`;
    setTimeout(() => {
      textElement.className = `${className} waiting`;
      setTimeout(() => {
        textElement.className = `${className} exiting`;
        setTimeout(() => {
          isAnimating = false;
          animationCycle = requestAnimationFrame(startAnimationCycle);
        }, 2500);
      }, 7e3);
    }, 2e3);
  }
  return {
    appendLoading() {
      safeDOM.append(document.head, oStyle);
      safeDOM.append(document.body, oDiv);
      setTimeout(startAnimationCycle, 100);
    },
    removeLoading() {
      if (animationCycle) {
        cancelAnimationFrame(animationCycle);
      }
      isAnimating = false;
      safeDOM.remove(document.head, oStyle);
      safeDOM.remove(document.body, oDiv);
    }
  };
}
const { appendLoading, removeLoading } = useLoading();
domReady().then(appendLoading);
window.onmessage = (ev) => {
  ev.data.payload === "removeLoading" && removeLoading();
};
setTimeout(removeLoading, 1e3);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlcyI6WyIuLi8uLi9lbGVjdHJvbi9wcmVsb2FkL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnRleHRCcmlkZ2UsIGlwY1JlbmRlcmVyIH0gZnJvbSAnZWxlY3Ryb24nO1xuXG4vLyAtLS0tLS0tLS0gRXhwb3NlIHNvbWUgQVBJIHRvIHRoZSBSZW5kZXJlciBwcm9jZXNzIC0tLS0tLS0tLVxuY29udGV4dEJyaWRnZS5leHBvc2VJbk1haW5Xb3JsZCgnaXBjUmVuZGVyZXInLCB7XG4gICAgb24oLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgaXBjUmVuZGVyZXIub24+KSB7XG4gICAgICAgIGNvbnN0IFtjaGFubmVsLCBsaXN0ZW5lcl0gPSBhcmdzO1xuICAgICAgICByZXR1cm4gaXBjUmVuZGVyZXIub24oY2hhbm5lbCwgKGV2ZW50LCAuLi5hcmdzKSA9PiBsaXN0ZW5lcihldmVudCwgLi4uYXJncykpO1xuICAgIH0sXG4gICAgb2ZmKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGlwY1JlbmRlcmVyLm9mZj4pIHtcbiAgICAgICAgY29uc3QgW2NoYW5uZWwsIC4uLm9taXRdID0gYXJncztcbiAgICAgICAgcmV0dXJuIGlwY1JlbmRlcmVyLm9mZihjaGFubmVsLCAuLi5vbWl0KTtcbiAgICB9LFxuICAgIHNlbmQoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgaXBjUmVuZGVyZXIuc2VuZD4pIHtcbiAgICAgICAgY29uc3QgW2NoYW5uZWwsIC4uLm9taXRdID0gYXJncztcbiAgICAgICAgcmV0dXJuIGlwY1JlbmRlcmVyLnNlbmQoY2hhbm5lbCwgLi4ub21pdCk7XG4gICAgfSxcbiAgICBpbnZva2UoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgaXBjUmVuZGVyZXIuaW52b2tlPikge1xuICAgICAgICBjb25zdCBbY2hhbm5lbCwgLi4ub21pdF0gPSBhcmdzO1xuICAgICAgICByZXR1cm4gaXBjUmVuZGVyZXIuaW52b2tlKGNoYW5uZWwsIC4uLm9taXQpO1xuICAgIH1cblxuICAgIC8vIFlvdSBjYW4gZXhwb3NlIG90aGVyIEFQVHMgeW91IG5lZWQgaGVyZS5cbiAgICAvLyAuLi5cbn0pO1xuXG5jb250ZXh0QnJpZGdlLmV4cG9zZUluTWFpbldvcmxkKCdlbGVjdHJvbkFQSScsIHtcbiAgICBvcGVuUHJvbXB0OiAob3B0aW9uczogYW55KSA9PiBpcGNSZW5kZXJlci5pbnZva2UoJ29wZW5fcHJvbXB0Jywgb3B0aW9ucyksXG4gICAgcmVhZEZpbGU6IChvcHRpb25zOiBhbnkpID0+IGlwY1JlbmRlcmVyLmludm9rZSgncmVhZF9maWxlJywgb3B0aW9ucyksXG4gICAgc2VsZWN0RGlyZWN0b3J5OiAoKSA9PiBpcGNSZW5kZXJlci5pbnZva2UoJ3NlbGVjdF9kaXJlY3RvcnknKSxcbiAgICBnZXRMb2dGaWxlczogKGRpclBhdGg6IHN0cmluZykgPT4gaXBjUmVuZGVyZXIuaW52b2tlKCdnZXRfbG9nX2ZpbGVzJywgZGlyUGF0aCksXG4gICAgcmVhZEZpbGVJbmNyZW1lbnRhbDogKG9wdGlvbnM6IGFueSkgPT4gaXBjUmVuZGVyZXIuaW52b2tlKCdyZWFkX2ZpbGVfaW5jcmVtZW50YWwnLCBvcHRpb25zKSxcbiAgICByZWFkRmlsZUNodW5rZWQ6IChvcHRpb25zOiBhbnkpID0+IGlwY1JlbmRlcmVyLmludm9rZSgncmVhZF9maWxlX2NodW5rZWQnLCBvcHRpb25zKSxcbiAgICByZWFkRmlsZVRhaWw6IChvcHRpb25zOiBhbnkpID0+IGlwY1JlbmRlcmVyLmludm9rZSgncmVhZF9maWxlX3RhaWwnLCBvcHRpb25zKSxcbiAgICByZWFkRmlsZUhlYWQ6IChvcHRpb25zOiBhbnkpID0+IGlwY1JlbmRlcmVyLmludm9rZSgncmVhZF9maWxlX2hlYWQnLCBvcHRpb25zKSxcbiAgICBzZWxlY3RKZGtEaXJlY3Rvcnk6ICgpID0+IGlwY1JlbmRlcmVyLmludm9rZSgnc2VsZWN0X2pka19kaXJlY3RvcnknKSxcbiAgICBzZWxlY3RKYXJGaWxlOiAoKSA9PiBpcGNSZW5kZXJlci5pbnZva2UoJ3NlbGVjdF9qYXJfZmlsZScpLFxuICAgIHZlcmlmeUpka1BhdGg6IChqZGtQYXRoOiBzdHJpbmcpID0+IGlwY1JlbmRlcmVyLmludm9rZSgndmVyaWZ5X2pka19wYXRoJywgamRrUGF0aCksXG4gICAgdmVyaWZ5SmFyRmlsZTogKGphclBhdGg6IHN0cmluZykgPT4gaXBjUmVuZGVyZXIuaW52b2tlKCd2ZXJpZnlfamFyX2ZpbGUnLCBqYXJQYXRoKSxcbiAgICBzdGFydEphclNlcnZpY2U6IChvcHRpb25zOiB7IGpka1BhdGg6IHN0cmluZzsgamFyUGF0aDogc3RyaW5nIH0pID0+IGlwY1JlbmRlcmVyLmludm9rZSgnc3RhcnRfamFyX3NlcnZpY2UnLCBvcHRpb25zKSxcbiAgICBzdG9wSmFyU2VydmljZTogKCkgPT4gaXBjUmVuZGVyZXIuaW52b2tlKCdzdG9wX2phcl9zZXJ2aWNlJyksXG4gICAgY2hlY2tTZXJ2aWNlSGVhbHRoOiAoKSA9PiBpcGNSZW5kZXJlci5pbnZva2UoJ2NoZWNrX3NlcnZpY2VfaGVhbHRoJyksXG4gICAgY2hlY2tQb3J0T2NjdXBpZWQ6IChwb3J0OiBudW1iZXIpID0+IGlwY1JlbmRlcmVyLmludm9rZSgnY2hlY2tfcG9ydF9vY2N1cGllZCcsIHBvcnQpLFxuICAgIFxuICAgIC8vIOeJiOacrOabtOaWsOebuOWFsyBBUElcbiAgICBmZXRjaFZlcnNpb25JbmZvOiAodmVyc2lvblVybDogc3RyaW5nKSA9PiBpcGNSZW5kZXJlci5pbnZva2UoJ2ZldGNoX3ZlcnNpb25faW5mbycsIHZlcnNpb25VcmwpLFxuICAgIGdldENhY2hlZFZlcnNpb246ICgpID0+IGlwY1JlbmRlcmVyLmludm9rZSgnZ2V0X2NhY2hlZF92ZXJzaW9uJyksXG4gICAgc2F2ZVZlcnNpb25DYWNoZTogKHZlcnNpb25JbmZvOiBhbnkpID0+IGlwY1JlbmRlcmVyLmludm9rZSgnc2F2ZV92ZXJzaW9uX2NhY2hlJywgdmVyc2lvbkluZm8pLFxuICAgIGRvd25sb2FkRmlsZTogKG9wdGlvbnM6IHsgZG93bmxvYWRVcmw6IHN0cmluZzsgc2F2ZVBhdGg6IHN0cmluZzsgZmlsZU5hbWU6IHN0cmluZyB9KSA9PiBcbiAgICAgICAgaXBjUmVuZGVyZXIuaW52b2tlKCdkb3dubG9hZF9maWxlJywgb3B0aW9ucyksXG4gICAgY2FuY2VsRG93bmxvYWQ6ICgpID0+IGlwY1JlbmRlcmVyLmludm9rZSgnY2FuY2VsX2Rvd25sb2FkJyksXG4gICAgY2hlY2tGaWxlRXhpc3RzOiAoZmlsZVBhdGg6IHN0cmluZykgPT4gaXBjUmVuZGVyZXIuaW52b2tlKCdjaGVja19maWxlX2V4aXN0cycsIGZpbGVQYXRoKSxcbiAgICBzZWxlY3REb3dubG9hZFBhdGg6ICgpID0+IGlwY1JlbmRlcmVyLmludm9rZSgnc2VsZWN0X2Rvd25sb2FkX3BhdGgnKSxcbiAgICBcbiAgICAvLyDnm5HlkKzkuIvovb3ov5vluqZcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IChjYWxsYmFjazogKHByb2dyZXNzOiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgICAgaXBjUmVuZGVyZXIub24oJ2Rvd25sb2FkLXByb2dyZXNzJywgKF8sIHByb2dyZXNzKSA9PiBjYWxsYmFjayhwcm9ncmVzcykpO1xuICAgIH0sXG4gICAgb2ZmRG93bmxvYWRQcm9ncmVzczogKCkgPT4ge1xuICAgICAgICBpcGNSZW5kZXJlci5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Rvd25sb2FkLXByb2dyZXNzJyk7XG4gICAgfVxufSk7XG5cbi8vIC0tLS0tLS0tLSBQcmVsb2FkIHNjcmlwdHMgbG9hZGluZyAtLS0tLS0tLS1cbmZ1bmN0aW9uIGRvbVJlYWR5KGNvbmRpdGlvbjogRG9jdW1lbnRSZWFkeVN0YXRlW10gPSBbJ2NvbXBsZXRlJywgJ2ludGVyYWN0aXZlJ10pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbi5pbmNsdWRlcyhkb2N1bWVudC5yZWFkeVN0YXRlKSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbi5pbmNsdWRlcyhkb2N1bWVudC5yZWFkeVN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmNvbnN0IHNhZmVET00gPSB7XG4gICAgYXBwZW5kKHBhcmVudDogSFRNTEVsZW1lbnQsIGNoaWxkOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAoIUFycmF5LmZyb20ocGFyZW50LmNoaWxkcmVuKS5maW5kKChlKSA9PiBlID09PSBjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZW1vdmUocGFyZW50OiBIVE1MRWxlbWVudCwgY2hpbGQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmIChBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbikuZmluZCgoZSkgPT4gZSA9PT0gY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogWVpKLVBSTyDlvanombnms6LliqjliqDovb3liqjnlLtcbiAqL1xuZnVuY3Rpb24gdXNlTG9hZGluZygpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBgeXpqLXByby1sb2FkaW5nYDtcbiAgICBjb25zdCBzdHlsZUNvbnRlbnQgPSBgXG4vKiDlvanombnog4zmma/oh6rnhLbmtarmva7liqjnlLsgLSDku47lt6blvoDlj7PmtYHliqggKi9cbkBrZXlmcmFtZXMgcmFpbmJvdy13YXZlIHtcbiAgMCUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMDAlIDAlO1xuICB9XG4gIDI1JSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI1JSAzMCU7XG4gIH1cbiAgNTAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNzAlO1xuICB9XG4gIDc1JSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTI1JSAyMCU7XG4gIH1cbiAgMTAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAwJSA1MCU7XG4gIH1cbn1cblxuLyog5rOi5rWq5puy57q/5Y+Y5b2i5Yqo55S7ICovXG5Aa2V5ZnJhbWVzIHdhdmUtZGlzdG9ydGlvbiB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNrZXdYKDBkZWcpIHNjYWxlWSgxKTtcbiAgfVxuICAyMCUge1xuICAgIHRyYW5zZm9ybTogc2tld1goMmRlZykgc2NhbGVZKDEuMDUpO1xuICB9XG4gIDQwJSB7XG4gICAgdHJhbnNmb3JtOiBza2V3WCgtMWRlZykgc2NhbGVZKDAuOTgpO1xuICB9XG4gIDYwJSB7XG4gICAgdHJhbnNmb3JtOiBza2V3WCgxLjVkZWcpIHNjYWxlWSgxLjAyKTtcbiAgfVxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2tld1goLTAuNWRlZykgc2NhbGVZKDEuMDEpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2tld1goMGRlZykgc2NhbGVZKDEpO1xuICB9XG59XG5cbi8qIOWtl+avjeS7juWPs+S+p+i/m+WFpeW5tuaXi+i9rOeahOWKqOeUuyAqL1xuQGtleWZyYW1lcyBsZXR0ZXItZW50ZXIge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDIwMHB4KSByb3RhdGUoMGRlZyk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgtMzYwZGVnKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi8qIOWtl+avjeS7juS4remXtOWQkeW3pua7muWKqOa2iOWkseeahOWKqOeUuyAqL1xuQGtleWZyYW1lcyBsZXR0ZXItZXhpdCB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgODAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzAwcHgpIHJvdGF0ZSgtMzYwZGVnKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbi5hcHAtbG9hZGluZy13cmFwIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDB2dztcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6IFxuICAgIHJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0IHRvcCwgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIDAlLCB0cmFuc3BhcmVudCA1MCUpLFxuICAgIGxpbmVhci1ncmFkaWVudCgxMjBkZWcsICNmZjAwMDAsICNmZjdmMDAsICNmZmZmMDAsICMwMGZmMDAsICMwMDAwZmYsICM0YjAwODIsICM5NDAwZDMsICNmZjAwMDAsICNmZjdmMDApLFxuICAgIHJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0IGJvdHRvbSwgcmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAwJSwgdHJhbnNwYXJlbnQgNzAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCUsIDYwMCUgMTUwJSwgMTAwJSAxMDAlO1xuICBhbmltYXRpb246IFxuICAgIHJhaW5ib3ctd2F2ZSAxMnMgZWFzZS1pbi1vdXQgaW5maW5pdGUsXG4gICAgd2F2ZS1kaXN0b3J0aW9uIDhzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICB6LWluZGV4OiA5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uYXBwLWxvYWRpbmctd3JhcDo6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIFxuICAgIHRyYW5zcGFyZW50IDIwJSwgXG4gICAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIDQwJSwgXG4gICAgdHJhbnNwYXJlbnQgNjAlLCBcbiAgICByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpIDgwJSwgXG4gICAgdHJhbnNwYXJlbnQgMTAwJSk7XG4gIGJhY2tncm91bmQtc2l6ZTogMjAwJSAyMDAlO1xuICBhbmltYXRpb246IHdhdmUtb3ZlcmxheSAxNXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgcmV2ZXJzZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qIOazoua1quWPoOWKoOWxguWKqOeUuyAqL1xuQGtleWZyYW1lcyB3YXZlLW92ZXJsYXkge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTUwJSAtNTAlO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDMzJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDE1MCU7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7XG4gIH1cbiAgNjYlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxNTAlIC01MCU7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTAuNWRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMjUwJSAxNTAlO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG59XG5cbi4ke2NsYXNzTmFtZX0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAxMHB4O1xuICBmb250LWZhbWlseTogJ0FyaWFsIEJsYWNrJywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogNHJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtc2hhZG93OiAycHggMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG5cbi4ke2NsYXNzTmFtZX0gLmxldHRlciB7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDIwMHB4KTtcbiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG59XG5cbi8qIOWFpeWcuuWKqOeUuyAqL1xuLiR7Y2xhc3NOYW1lfS5lbnRlcmluZyAubGV0dGVyOm50aC1jaGlsZCgxKSB7IGFuaW1hdGlvbjogbGV0dGVyLWVudGVyIDAuOHMgZWFzZS1vdXQgMC4xcyBmb3J3YXJkczsgfVxuLiR7Y2xhc3NOYW1lfS5lbnRlcmluZyAubGV0dGVyOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbjogbGV0dGVyLWVudGVyIDAuOHMgZWFzZS1vdXQgMC4zcyBmb3J3YXJkczsgfVxuLiR7Y2xhc3NOYW1lfS5lbnRlcmluZyAubGV0dGVyOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbjogbGV0dGVyLWVudGVyIDAuOHMgZWFzZS1vdXQgMC41cyBmb3J3YXJkczsgfVxuLiR7Y2xhc3NOYW1lfS5lbnRlcmluZyAubGV0dGVyOm50aC1jaGlsZCg0KSB7IGFuaW1hdGlvbjogbGV0dGVyLWVudGVyIDAuOHMgZWFzZS1vdXQgMC43cyBmb3J3YXJkczsgfVxuLiR7Y2xhc3NOYW1lfS5lbnRlcmluZyAubGV0dGVyOm50aC1jaGlsZCg1KSB7IGFuaW1hdGlvbjogbGV0dGVyLWVudGVyIDAuOHMgZWFzZS1vdXQgMC45cyBmb3J3YXJkczsgfVxuLiR7Y2xhc3NOYW1lfS5lbnRlcmluZyAubGV0dGVyOm50aC1jaGlsZCg2KSB7IGFuaW1hdGlvbjogbGV0dGVyLWVudGVyIDAuOHMgZWFzZS1vdXQgMS4xcyBmb3J3YXJkczsgfVxuLiR7Y2xhc3NOYW1lfS5lbnRlcmluZyAubGV0dGVyOm50aC1jaGlsZCg3KSB7IGFuaW1hdGlvbjogbGV0dGVyLWVudGVyIDAuOHMgZWFzZS1vdXQgMS4zcyBmb3J3YXJkczsgfVxuXG4vKiDpgIDlnLrliqjnlLsgKi9cbi4ke2NsYXNzTmFtZX0uZXhpdGluZyAubGV0dGVyOm50aC1jaGlsZCgxKSB7IGFuaW1hdGlvbjogbGV0dGVyLWV4aXQgMC44cyBlYXNlLWluIDAuMXMgZm9yd2FyZHM7IH1cbi4ke2NsYXNzTmFtZX0uZXhpdGluZyAubGV0dGVyOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbjogbGV0dGVyLWV4aXQgMC44cyBlYXNlLWluIDAuM3MgZm9yd2FyZHM7IH1cbi4ke2NsYXNzTmFtZX0uZXhpdGluZyAubGV0dGVyOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbjogbGV0dGVyLWV4aXQgMC44cyBlYXNlLWluIDAuNXMgZm9yd2FyZHM7IH1cbi4ke2NsYXNzTmFtZX0uZXhpdGluZyAubGV0dGVyOm50aC1jaGlsZCg0KSB7IGFuaW1hdGlvbjogbGV0dGVyLWV4aXQgMC44cyBlYXNlLWluIDAuN3MgZm9yd2FyZHM7IH1cbi4ke2NsYXNzTmFtZX0uZXhpdGluZyAubGV0dGVyOm50aC1jaGlsZCg1KSB7IGFuaW1hdGlvbjogbGV0dGVyLWV4aXQgMC44cyBlYXNlLWluIDAuOXMgZm9yd2FyZHM7IH1cbi4ke2NsYXNzTmFtZX0uZXhpdGluZyAubGV0dGVyOm50aC1jaGlsZCg2KSB7IGFuaW1hdGlvbjogbGV0dGVyLWV4aXQgMC44cyBlYXNlLWluIDEuMXMgZm9yd2FyZHM7IH1cbi4ke2NsYXNzTmFtZX0uZXhpdGluZyAubGV0dGVyOm50aC1jaGlsZCg3KSB7IGFuaW1hdGlvbjogbGV0dGVyLWV4aXQgMC44cyBlYXNlLWluIDEuM3MgZm9yd2FyZHM7IH1cblxuLyog562J5b6F54q25oCB5pe255qE6L275b6u5rWu5Yqo5pWI5p6cICovXG4uJHtjbGFzc05hbWV9LndhaXRpbmcgLmxldHRlciB7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTtcbn1cblxuLyog6YCA5Zy654q25oCB5Yid5aeL6K6+572uICovXG4uJHtjbGFzc05hbWV9LmV4aXRpbmcgLmxldHRlciB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZyk7XG59XG5cbkBrZXlmcmFtZXMgZmxvYXQge1xuICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9XG4gIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7IH1cbn1cblxuLiR7Y2xhc3NOYW1lfS53YWl0aW5nIC5sZXR0ZXI6bnRoLWNoaWxkKDEpIHsgYW5pbWF0aW9uOiBmbG9hdCAycyBlYXNlLWluLW91dCAwLjFzIGluZmluaXRlOyB9XG4uJHtjbGFzc05hbWV9LndhaXRpbmcgLmxldHRlcjpudGgtY2hpbGQoMikgeyBhbmltYXRpb246IGZsb2F0IDJzIGVhc2UtaW4tb3V0IDAuM3MgaW5maW5pdGU7IH1cbi4ke2NsYXNzTmFtZX0ud2FpdGluZyAubGV0dGVyOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbjogZmxvYXQgMnMgZWFzZS1pbi1vdXQgMC41cyBpbmZpbml0ZTsgfVxuLiR7Y2xhc3NOYW1lfS53YWl0aW5nIC5sZXR0ZXI6bnRoLWNoaWxkKDQpIHsgYW5pbWF0aW9uOiBmbG9hdCAycyBlYXNlLWluLW91dCAwLjdzIGluZmluaXRlOyB9XG4uJHtjbGFzc05hbWV9LndhaXRpbmcgLmxldHRlcjpudGgtY2hpbGQoNSkgeyBhbmltYXRpb246IGZsb2F0IDJzIGVhc2UtaW4tb3V0IDAuOXMgaW5maW5pdGU7IH1cbi4ke2NsYXNzTmFtZX0ud2FpdGluZyAubGV0dGVyOm50aC1jaGlsZCg2KSB7IGFuaW1hdGlvbjogZmxvYXQgMnMgZWFzZS1pbi1vdXQgMS4xcyBpbmZpbml0ZTsgfVxuLiR7Y2xhc3NOYW1lfS53YWl0aW5nIC5sZXR0ZXI6bnRoLWNoaWxkKDcpIHsgYW5pbWF0aW9uOiBmbG9hdCAycyBlYXNlLWluLW91dCAxLjNzIGluZmluaXRlOyB9XG4gICAgYDtcblxuICAgIGNvbnN0IG9TdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgY29uc3Qgb0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgb1N0eWxlLmlkID0gJ2FwcC1sb2FkaW5nLXN0eWxlJztcbiAgICBvU3R5bGUuaW5uZXJIVE1MID0gc3R5bGVDb250ZW50O1xuICAgIG9EaXYuY2xhc3NOYW1lID0gJ2FwcC1sb2FkaW5nLXdyYXAnO1xuICAgIG9EaXYuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTmFtZX0gZW50ZXJpbmdcIiBpZD1cInl6ai1wcm8tdGV4dFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsZXR0ZXJcIj5ZPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsZXR0ZXJcIj5aPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsZXR0ZXJcIj5KPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsZXR0ZXJcIj4tPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsZXR0ZXJcIj5QPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsZXR0ZXJcIj5SPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsZXR0ZXJcIj5PPC9zcGFuPlxuICAgIDwvZGl2PlxuICBgO1xuXG4gICAgbGV0IGFuaW1hdGlvbkN5Y2xlOiBudW1iZXI7XG4gICAgbGV0IGlzQW5pbWF0aW5nID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBzdGFydEFuaW1hdGlvbkN5Y2xlKCkge1xuICAgICAgICBpZiAoaXNBbmltYXRpbmcpIHJldHVybjtcbiAgICAgICAgaXNBbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3l6ai1wcm8tdGV4dCcpO1xuICAgICAgICBpZiAoIXRleHRFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgLy8g5byA5aeL5YWl5Zy65Yqo55S7XG4gICAgICAgIHRleHRFbGVtZW50LmNsYXNzTmFtZSA9IGAke2NsYXNzTmFtZX0gZW50ZXJpbmdgO1xuXG4gICAgICAgIC8vIDLnp5LlkI7liIfmjaLliLDnrYnlvoXnirbmgIHvvIjmiYDmnInlrZfmr43pg73lt7Lov5vlhaXvvIlcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0ZXh0RWxlbWVudC5jbGFzc05hbWUgPSBgJHtjbGFzc05hbWV9IHdhaXRpbmdgO1xuXG4gICAgICAgICAgICAvLyA356eS562J5b6F5ZCO5byA5aeL6YCA5Zy65Yqo55S7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0RWxlbWVudC5jbGFzc05hbWUgPSBgJHtjbGFzc05hbWV9IGV4aXRpbmdgO1xuXG4gICAgICAgICAgICAgICAgLy8g6YCA5Zy65Yqo55S75a6M5oiQ5ZCO6YeN5paw5byA5aeL5b6q546vXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkN5Y2xlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0YXJ0QW5pbWF0aW9uQ3ljbGUpO1xuICAgICAgICAgICAgICAgIH0sIDI1MDApOyAvLyDpgIDlnLrliqjnlLvmjIHnu63ml7bpl7TvvIgwLjhz5Yqo55S7ICsgMS4zc+W7tui/nyArIDAuNHPnvJPlhrLvvIlcbiAgICAgICAgICAgIH0sIDcwMDApOyAvLyDnrYnlvoU356eSXG4gICAgICAgIH0sIDIwMDApOyAvLyDlhaXlnLrliqjnlLvmjIHnu63ml7bpl7RcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhcHBlbmRMb2FkaW5nKCkge1xuICAgICAgICAgICAgc2FmZURPTS5hcHBlbmQoZG9jdW1lbnQuaGVhZCwgb1N0eWxlKTtcbiAgICAgICAgICAgIHNhZmVET00uYXBwZW5kKGRvY3VtZW50LmJvZHksIG9EaXYpO1xuICAgICAgICAgICAgLy8g5ZCv5Yqo5Yqo55S75b6q546vXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHN0YXJ0QW5pbWF0aW9uQ3ljbGUsIDEwMCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUxvYWRpbmcoKSB7XG4gICAgICAgICAgICBpZiAoYW5pbWF0aW9uQ3ljbGUpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25DeWNsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0FuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2FmZURPTS5yZW1vdmUoZG9jdW1lbnQuaGVhZCwgb1N0eWxlKTtcbiAgICAgICAgICAgIHNhZmVET00ucmVtb3ZlKGRvY3VtZW50LmJvZHksIG9EaXYpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCB7IGFwcGVuZExvYWRpbmcsIHJlbW92ZUxvYWRpbmcgfSA9IHVzZUxvYWRpbmcoKTtcbmRvbVJlYWR5KCkudGhlbihhcHBlbmRMb2FkaW5nKTtcblxud2luZG93Lm9ubWVzc2FnZSA9IChldikgPT4ge1xuICAgIGV2LmRhdGEucGF5bG9hZCA9PT0gJ3JlbW92ZUxvYWRpbmcnICYmIHJlbW92ZUxvYWRpbmcoKTtcbn07XG5cbnNldFRpbWVvdXQocmVtb3ZlTG9hZGluZywg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QTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FtSXRCLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBV1QsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FRVCxTQUFTO0FBQUEsR0FDVCxTQUFTO0FBQUEsR0FDVCxTQUFTO0FBQUEsR0FDVCxTQUFTO0FBQUEsR0FDVCxTQUFTO0FBQUEsR0FDVCxTQUFTO0FBQUEsR0FDVCxTQUFTO0FBQUE7QUFBQTtBQUFBLEdBR1QsU0FBUztBQUFBLEdBQ1QsU0FBUztBQUFBLEdBQ1QsU0FBUztBQUFBLEdBQ1QsU0FBUztBQUFBLEdBQ1QsU0FBUztBQUFBLEdBQ1QsU0FBUztBQUFBLEdBQ1QsU0FBUztBQUFBO0FBQUE7QUFBQSxHQUdULFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQU9ULFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQVVULFNBQVM7QUFBQSxHQUNULFNBQVM7QUFBQSxHQUNULFNBQVM7QUFBQSxHQUNULFNBQVM7QUFBQSxHQUNULFNBQVM7QUFBQSxHQUNULFNBQVM7QUFBQSxHQUNULFNBQVM7QUFBQTtBQUdGLFFBQUEsU0FBUyxTQUFTLGNBQWMsT0FBTztBQUN2QyxRQUFBLE9BQU8sU0FBUyxjQUFjLEtBQUs7QUFFekMsU0FBTyxLQUFLO0FBQ1osU0FBTyxZQUFZO0FBQ25CLE9BQUssWUFBWTtBQUNqQixPQUFLLFlBQVk7QUFBQSxrQkFDSCxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV25CLE1BQUE7QUFDSixNQUFJLGNBQWM7QUFFbEIsV0FBUyxzQkFBc0I7QUFDM0IsUUFBSSxZQUFhO0FBQ0gsa0JBQUE7QUFFUixVQUFBLGNBQWMsU0FBUyxlQUFlLGNBQWM7QUFDMUQsUUFBSSxDQUFDLFlBQWE7QUFHTixnQkFBQSxZQUFZLEdBQUcsU0FBUztBQUdwQyxlQUFXLE1BQU07QUFDRCxrQkFBQSxZQUFZLEdBQUcsU0FBUztBQUdwQyxpQkFBVyxNQUFNO0FBQ0Qsb0JBQUEsWUFBWSxHQUFHLFNBQVM7QUFHcEMsbUJBQVcsTUFBTTtBQUNDLHdCQUFBO0FBQ2QsMkJBQWlCLHNCQUFzQixtQkFBbUI7QUFBQSxXQUMzRCxJQUFJO0FBQUEsU0FDUixHQUFJO0FBQUEsT0FDUixHQUFJO0FBQUEsRUFDWDtBQUVPLFNBQUE7QUFBQSxJQUNILGdCQUFnQjtBQUNKLGNBQUEsT0FBTyxTQUFTLE1BQU0sTUFBTTtBQUM1QixjQUFBLE9BQU8sU0FBUyxNQUFNLElBQUk7QUFFbEMsaUJBQVcscUJBQXFCLEdBQUc7QUFBQSxJQUN2QztBQUFBLElBQ0EsZ0JBQWdCO0FBQ1osVUFBSSxnQkFBZ0I7QUFDaEIsNkJBQXFCLGNBQWM7QUFBQSxNQUN2QztBQUNjLG9CQUFBO0FBQ04sY0FBQSxPQUFPLFNBQVMsTUFBTSxNQUFNO0FBQzVCLGNBQUEsT0FBTyxTQUFTLE1BQU0sSUFBSTtBQUFBLElBQ3RDO0FBQUEsRUFBQTtBQUVSO0FBSUEsTUFBTSxFQUFFLGVBQWUsa0JBQWtCO0FBQ3pDLFdBQVcsS0FBSyxhQUFhO0FBRTdCLE9BQU8sWUFBWSxDQUFDLE9BQU87QUFDcEIsS0FBQSxLQUFLLFlBQVksbUJBQW1CLGNBQWM7QUFDekQ7QUFFQSxXQUFXLGVBQWUsR0FBSTsifQ==
